home *** CD-ROM | disk | FTP | other *** search
/ Windows News 2010 Summer - Disc 1 / WN_Ete2010_CD1.iso / Onglet5 / Weezo / Weezo setup.exe / {code_appDir} / www / includes / layoutClass.php < prev    next >
PHP Script  |  2010-05-19  |  4KB  |  142 lines

  1. <?php
  2. define('layoutVertical', 0); // vertical panels
  3. define('layoutHorizontal',1); // horizontal panels
  4. define('layoutContent',2); // HTML content
  5.  
  6. /**
  7.  * HTML Layout class
  8.  *
  9.  */
  10. class layout{
  11.     private $id; // PHP & DOM id of block
  12.     private $type; // Layout type (layoutVertical || layoutHorizontal || layoutContent)
  13.     private $nbPanels; // number of pannels
  14.  
  15.     public $parentLayout; // Parent layout (null if topmost layout)
  16.  
  17.     private $userScalable; // True if user may shrink/expand this layout. Require a parent layout
  18.     private $dim; // width or height of layout depending on $type. Allowed values:
  19.                  // 'auto': adapts on content
  20.                  // 'fill': fills empty space left by other(s) panel(s)
  21.                  // 'hidden': hidden
  22.                  // numeric value in px, em or %
  23.     private $maxDim; // numeric value in px, em or %, false if no value
  24.     private $minDim; // numeric value in px, em or %, false if no value
  25.  
  26.     private $extraStyle; // Extra CSS style to be applied
  27.     private $extraHTML; // Extra HTML (attributes) to be applied inside tag
  28.  
  29.     public $content; // Content of layout: layout or HTML
  30.  
  31.  
  32.     /**
  33.      * @desc Constructor
  34.      *
  35.      * @param string $id: PHP & DOM element id
  36.      * @param int $type : layoutHorizontal or layoutVertical or layoutContent
  37.      * @param int $nbPanels : number of panels
  38.      */
  39.     function __construct($id, $type, $nbPanels=0){
  40.         if($type!=layoutHorizontal && $type!=layoutVertical && $type!=layoutContent) throw new Exception('Incorrect layout type');
  41.         if($type==layoutContent) $nbPanels=0;
  42.         elseif (!is_numeric($nbPanels) || $nbPanels<2 || $nbPanels>3) throw new Exception('Incorrect number of panels (2 or 3)');
  43.         $this->type=$type;
  44.         $this->id=$id;
  45.         $this->nbPanels=$nbPanels;
  46.         $this->maxDim=false;
  47.         $this->minDim=false;
  48.         $this->userScalable=false;
  49.         $this->content=array();
  50.         $this->extraStyle='';
  51.         $this->extraHTML='';
  52.         $parentLayout=null;
  53.     }
  54.  
  55.     /**
  56.      * @desc Set panel content
  57.      *
  58.      * @param int $panelNb: panel number
  59.      * @param mixed $content: HTML code or layout
  60.      */
  61.     function setContent($content,$panelNb=0){
  62.         // HTML content
  63.         if($this->type==layoutContent && is_string($content)) $this->content=$content;
  64.         // Layout content
  65.         elseif(is_object($content) && get_class($content)=='layout') {
  66.             if($panelNb<0 || $panelNb >= $this->nbPanels) throw new Exception('Incorrect panel number');
  67.             $this->content[$panelNb]=$content;
  68.             $content->parentLayout=$this;
  69.         }
  70.         else throw new Exception('Incorrect content for '.$this->id.' '.$this->type);
  71.     }
  72.  
  73.     /**
  74.      * @desc Set layout dimensions
  75.      *
  76.      * @param string $dim: See dim
  77.      * @param string $min: See min
  78.      * @param string $max: See max
  79.      */
  80.     function setDimensions($dim, $min=false, $max=false){
  81.         if($dim!='auto' && $dim!='fill'){
  82.             if(is_numeric($dim)) $dim.='px';
  83.             if(substr($dim,-2)!='px' && substr($dim,-2)!='em' && substr($dim,-1)!='%') throw new Exception('Invalid dimension');
  84.         }
  85.         if($min>$max) throw new Exception('Invalid min/max values');
  86.         $this->dim=$dim;
  87.         $this->min=$min;
  88.         $this->max=$max;
  89.     }
  90.  
  91.     /**
  92.      * @desc Set layout user scalable or not
  93.      *
  94.      * @param boolean $userScalable
  95.      */
  96.     function setUserScalable($userScalable=true){
  97.         $this->userScalable=$userScalable;
  98.     }
  99.  
  100.     function setExtraStyle($extraStyle){$this->extraStyle=$extraStyle;}
  101.     function setExtraHTML($extraHTML){$this->extraHTML=$extraHTML;}
  102.  
  103.     /**
  104.      * @desc Create layouts : insert javascript and HTML code
  105.      */
  106.     function create(){
  107.         if(!$this->parentLayout) {
  108.             $topMost=true;
  109.             $this->insertJavascript();
  110.         }
  111.         else $topMost=false;
  112.  
  113.         echo '<div style="position:absolute;';
  114.         if ($this->type==layoutHorizontal){
  115.             echo 'width:'.(($this->dim=='fill')?'100%':$this->dim);
  116.         }
  117.         else{
  118.             echo 'height:'.(($this->dim=='fill')?'100%':$this->dim);
  119.         }
  120.         // Style
  121.         if($topMost) echo ';visibility:hidden';
  122.         echo (($this->extraStyle)?';'.$this->extraStyle:'').'"';
  123.         if($this->extraHTML) echo ' '.$this->extraHTML;
  124.         echo ' id="'.$this->id.'">';
  125.  
  126.         // HTML content
  127.         if($this->type==layoutContent) {
  128.             echo $this->content;
  129.         }
  130.         // Other layouts
  131.         else for($i=0;$i<$this->nbPanels;$i++){
  132.             if(!isset($this->content[$i])) throw new Exception('Unset panel '.$i.' for layout '.$this->id);
  133.             $this->content[$i]->create();
  134.         }
  135.         echo "</div>\n";
  136.     }
  137.  
  138.     function insertJavascript(){
  139.  
  140.     }
  141. }
  142. ?>